using System;

namespace CodeSpirit.Core.Attributes
{
    /// <summary>
    /// AI表单填充特性
    /// </summary>
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class AiFormFillAttribute : Attribute
    {
        /// <summary>
        /// 触发AI填充的字段名称
        /// 如果为空，则启用全局AI填充模式（在表单顶部显示AI优化组件）
        /// </summary>
        public string TriggerField { get; set; } = string.Empty;

        /// <summary>
        /// 需要忽略的字段列表
        /// </summary>
        public string[] IgnoreFields { get; set; } = Array.Empty<string>();

        /// <summary>
        /// 自定义提示词模板
        /// </summary>
        public string CustomPromptTemplate { get; set; }

        /// <summary>
        /// API端点路径（相对路径）
        /// </summary>
        public string ApiEndpoint { get; set; }

        /// <summary>
        /// 最大Token数量
        /// </summary>
        public int MaxTokens { get; set; } = 1000;

        /// <summary>
        /// 是否启用缓存
        /// </summary>
        public bool EnableCache { get; set; } = true;

        /// <summary>
        /// 缓存过期时间（分钟）
        /// </summary>
        public int CacheExpirationMinutes { get; set; } = 30;

        /// <summary>
        /// 全局AI填充模式的提示文本
        /// 当TriggerField为空时，在表单顶部显示的AI优化文本框为空时的提示词
        /// </summary>
        public string GlobalFillPrompt { get; set; } = "使用AI智能优化表单";

        /// <summary>
        /// 是否为全局AI填充模式
        /// 当TriggerField为空时，返回true
        /// </summary>
        public bool IsGlobalMode => string.IsNullOrEmpty(TriggerField);

        /// <summary>
        /// 是否使用独立的LLM配置
        /// 当设置为true时，将使用专门的AiFormFill LLM配置而不是全局LLM配置
        /// </summary>
        public bool UseIndependentLLM { get; set; } = false;

        /// <summary>
        /// 独立LLM配置的设置键名
        /// 当UseIndependentLLM为true时，从此键名获取LLM配置
        /// </summary>
        public string LLMSettingsKey { get; set; } = "AiFormFillLLM";

        /// <summary>
        /// 是否禁用思考（enable_thinking）
        /// 仅在UseIndependentLLM为true时生效
        /// </summary>
        public bool DisableThinking { get; set; } = true;

        /// <summary>
        /// 响应格式类型
        /// 仅在UseIndependentLLM为true时生效，如"json_object"
        /// </summary>
        public string ResponseFormatType { get; set; } = "json_object";

        /// <summary>
        /// 温度参数
        /// 仅在UseIndependentLLM为true时生效，控制生成内容的随机性
        /// </summary>
        public double Temperature { get; set; } = 0.1;

        /// <summary>
        /// Top-p参数
        /// 仅在UseIndependentLLM为true时生效，控制生成内容的多样性
        /// </summary>
        public double TopP { get; set; } = 0.9;
    }

    /// <summary>
    /// AI字段填充特性
    /// </summary>
    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public class AiFieldFillAttribute : Attribute
    {
        /// <summary>
        /// 是否参与AI填充
        /// </summary>
        public bool Enabled { get; set; } = true;

        /// <summary>
        /// 字段权重（影响提示词中的重要性）
        /// </summary>
        public int Weight { get; set; } = 1;

        /// <summary>
        /// 字段填充优先级
        /// </summary>
        public int Priority { get; set; } = 0;

        /// <summary>
        /// 自定义字段描述（用于提示词生成）
        /// 如果未设置，将自动从属性的Description特性获取
        /// </summary>
        public string CustomDescription { get; set; }
    }
}
